#pragma GCC optimize(2)
#include <iostream>
#include <queue>
#include <map>
#include <unordered_map>
#include <vector>
#include <algorithm>
#include <cmath>
#include <string>
#include <cstring>
#include <set>
#include <unordered_set>
#define IOS ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
const int N=2e5+10;
int idx;
int son[N*32][2];
int cnt[N*32][2];
int k;
vector<int> a1,x,a2;
vector<int> b1,b2;
vector<int> ev;
int a[N];
int res;
int flag=0;
void add(int x)
{
	int p=0,u=0;
	for(int i=k-1;i>=0;i--)
	{
		u=x>>i & 1;
		if(!son[p][u])
		{
			son[p][u]=++idx;
		} 
		cnt[p][u]++;
		p=son[p][u];
	}
}

void dfs1(int p)
{
	for(int i=0;i<=1;i++)
	{
		if(son[p][i])
		{
			b1.push_back(i);
			dfs1(son[p][i]);
		}
	}
}

void dfs2(int p)
{
	for(int i=0;i<=1;i++)
	{
		if(son[p][i])
		{
			b2.push_back(i);
			dfs2(son[p][i]);
		}
	}
}

void dfs(int p,int kk,int sum,int num1,int f=0)
{
	
	if(kk==-1)
	{
		if(f==0) res=max(res,sum);
		if(f==1 && sum==res)
		{
			a1.push_back(num1);
		    x.push_back((num1^1));
		    a2.push_back(num1);
		    flag=1;
		}
		return;
	}
	int left = son[p][0];
	int right= son[p][1];

	if(cnt[p][0]>=2 && flag==0) dfs(left,kk-1,sum+(1<<kk),0,f);
		
	if(cnt[p][1]>=2 && flag==0) dfs(right,kk-1,sum+(1<<kk),1,f);
		
	if(cnt[p][1]==1 && cnt[p][0]==1 && flag==0)
	{
		b1=ev;
		b2=ev;
		dfs1(left);
		dfs2(right);
		int num=0;
		for(int i=0;i<b1.size();i++)
		{
			if(b1[i]==b2[i]) num+=1;
			num*=2;
		}
		sum+=num;
		res=max(res,sum);
		if(sum==res && f)
		{
			flag=1;
			for(int i=b1.size()-1;i>=0;i--)
			{
				a1.push_back(b1[i]);
				x.push_back((b1[i]^1));
				a2.push_back((b2[i]));
			}
			a1.push_back(0);
			x.push_back(1);
			a2.push_back(1);
		}
	}
	
	if(num1==-1) return;

	if(flag)
	{
		a1.push_back(num1);
		x.push_back((num1^1));
		a2.push_back(num1);
		return;
	}	
}

void dfs3(int p)
{
	for(int i=0;i<=1;i++)
	{
		if(son[p][i])
		{
			dfs3(son[p][i]);
			son[p][i]=0;
			cnt[p][i]=0;
		}
	}
}
void init(int n)
{
	a1=ev;
	a2=ev;
	x=ev;
	res=0;
	idx=0;
	flag=0;
	dfs3(0);
}
int main()
{
	IOS;
	int t;
	cin>>t;
	while(t--)
	{
		
		int n;
		cin>>n>>k;
		for(int i=1;i<=n;i++)
		{
			cin>>a[i];
			add(a[i]);
		}
		dfs(0,k-1,0,-1);
		dfs(0,k-1,0,-1,1);
		int xx=0,aa1=0,aa2=0;
		for(int i=a1.size()-1;i>=0;i--)
		{
//			cout<<x[i]<<' ';
			xx=xx*2+x[i];
			aa1=aa1*2+a1[i];
			aa2=aa2*2+a2[i];
		}
//		cout<<endl;
//		cout<<aa1<<' '<<aa2<<endl;
		int p1=0;
		int p2=0;
		for(int i=1;i<=n;i++)
		{
			if(a[i]==aa1 && !p1)
			{
				p1=i;
			}
			else if(a[i]==aa2 && !p2)
			{
				p2=i;
			}
		}
		init(n);
		cout<<p1<<' '<<p2<<' '<<xx<<endl;
	}

	return 0;
}

